package top.lixunda.ecommerce.server.good.api.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import top.lixunda.commerce.common.core.entity.MessageObject;
import top.lixunda.common.validate.XumValid;
import top.lixunda.ecommerce.server.business.api.entity.dto.PageDTO;
import top.lixunda.ecommerce.server.good.api.entity.db.EnshrineStoreDO;
import top.lixunda.ecommerce.server.good.api.entity.dto.EnshrineStoreQueryDTO;
import top.lixunda.ecommerce.server.good.api.entity.vo.EnshrineStoreVO;

import java.util.List;

/**
 * <p>
 * Feign客户端，接口调用
 * 店铺收藏
 * </p>
 *
 * @author Xumda
 * @version time:2020/1/7 15:40
 */
@SuppressWarnings("unused")
@Api("店铺收藏")
@RequestMapping("/enshrine-store")
public interface IEnshrineStoreController {

    /**
     * 当前用户收藏一家店铺
     *
     * @param id 店铺id
     * @return 是否收藏成功
     */
    @ApiOperation("当前用户收藏一家店铺")
    @GetMapping("addEnshrineStore")
    MessageObject<Boolean> addEnshrineStore(@RequestParam("id") Integer id);

    /**
     * 当前用户收藏多家店铺
     *
     * @param ids 店铺id列表
     * @return 收藏成功的数目
     */
    @ApiOperation("当前用户收藏一家店铺")
    @PostMapping("addEnshrineStores")
    MessageObject<Integer> addEnshrineStores(@RequestBody List<Integer> ids);

    /**
     * 移除一个收藏的店铺
     *
     * @param id 收藏id
     * @return 是否取消收藏成功
     */
    @ApiOperation("移除一个收藏的店铺")
    @GetMapping("removeEnshrineStore")
    MessageObject<Boolean> removeEnshrineStore(@RequestParam("id") Integer id);

    /**
     * 移除多个收藏的店铺
     *
     * @param ids 收藏id列表
     * @return 取消收藏的数据
     */
    @ApiOperation("移除多个收藏的店铺")
    @PostMapping("removeEnshrineStores")
    MessageObject<Integer> removeEnshrineStores(@RequestBody List<Integer> ids);

    /**
     * 获取所有收藏的店铺信息
     *
     * @return 收藏店铺信息类表
     */
    @ApiOperation("获取所有收藏的店铺信息")
    @GetMapping("queryAllEnshrineStores")
    MessageObject<List<EnshrineStoreVO>> queryAllEnshrineStores();

    /**
     * 根据条件查询店铺收藏信息
     *
     * @param enshrineStoreQueryDTO 查询条件
     * @return 收藏店铺信息类表
     */
    @ApiOperation("根据条件查询店铺收藏信息")
    @PostMapping("queryEnshrineStoresWrapper")
    MessageObject<List<EnshrineStoreVO>> queryEnshrineStoresWrapper(
            @RequestBody @XumValid EnshrineStoreQueryDTO enshrineStoreQueryDTO);

    /**
     * 获取所有收藏的店铺信息，分页
     *
     * @param pageDTO 分页数据，条件不起作用，若想使用条件请使用queryEnshrineGoodsPageWrapper接口
     * @return 收藏店铺信息类表
     * @see IEnshrineGoodsController#queryEnshrineGoodsPageWrapper(PageDTO)
     */
    @ApiOperation("获取所有收藏的店铺信息，分页")
    @PostMapping("queryEnshrineStoresPage")
    MessageObject<IPage<EnshrineStoreVO>> queryEnshrineStoresPage(
            @RequestBody @XumValid PageDTO<EnshrineStoreDO, ?> pageDTO);

    /**
     * 根据条件查询店铺收藏信息，分页
     *
     * @param pageDTO 分页数据以及查询条件
     * @return 收藏店铺信息类表
     */
    @ApiOperation("根据条件查询店铺收藏信息，分页")
    @PostMapping("queryEnshrineStoresPageWrapper")
    MessageObject<IPage<EnshrineStoreVO>> queryEnshrineStoresPageWrapper(
            @RequestBody @XumValid PageDTO<EnshrineStoreDO, EnshrineStoreQueryDTO> pageDTO);

    /**
     * 根据id查询收藏数据
     *
     * @param id 收藏id
     * @return 收藏的数据
     */
    @ApiOperation("根据id查询收藏数据")
    @GetMapping("queryById")
    MessageObject<EnshrineStoreVO> queryById(@RequestParam("id") Integer id);

    /**
     * 根据id列表查询收藏多条数据
     *
     * @param ids 收藏id列表
     * @return 收藏的数据
     */
    @ApiOperation("根据id列表查询收藏多条数据")
    @PostMapping("queryByIds")
    MessageObject<List<EnshrineStoreVO>> queryByIds(@RequestBody List<Integer> ids);

}
